package com.xlf.pojo.base;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.xlf.pojo.mode.BaseEntity;
import com.xlf.pojo.vo.UserVO;
import lombok.Data;

/**
 *
 * @TableName contest
 */
@TableName(value ="contest")
@Data
public class Contest extends BaseEntity implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 比赛创建者id
     */
    private Long uid;

    /**
     *
     */
    private String title;

    /**
     * 0为acm赛制，1为OI
     */
    private Integer type;


    /**
     *
     */
    private String description;

    /**
     * 比赛来源，原创为0，克隆赛为比赛id
     */
    private Integer source;

    /**
     * 0为公开赛，1为私有赛（访问有密码），2为保护赛（提交有密码）
     */
    private Integer auth;

    /**
     * 比赛密码
     */
    private String pwd;

    /**
     * 开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;

    /**
     * 结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endTime;

    /**
     * 比赛时长(s)
     */
    private Long duration;

    /**
     * 是否开启封榜
     */
    private Integer sealRank;

    /**
     * 封榜起始时间，一直到比赛结束，不刷新榜单
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date sealRankTime;

    /**
     * 比赛结束是否自动解除封榜,自动转换成真实榜单
     */
    private Integer autoRealRank;

    /**
     * 0为未开始,1为进行中，2为已结束
     */
    @Deprecated
    private Integer progress;

    /**
     * 是否可见
     */
    private Integer visible;

    /**
     * 是否打开打印功能
     */
    private Integer openPrint;

    /**
     * 是否开启账号限制
     */
    private Integer openAccountLimit;

    /**
     * 账号限制规则
     */
    private String accountLimitRule;

    /**
     * 排行榜显示（username、nickname、realname）
     */
    private String rankShowName;

    /**
     * 是否开放比赛榜单
     */
    private Integer openRank;

    /**
     * 打星用户列表
     */
    private String starAccount;

    /**
     * oi排行榜得分方式，Recent、Highest
     */
    private String oiRankScoreType;

    /**
     *
     */
    private Integer isGroup;

    /**
     *
     */
    private Long gid;

    /**
     * 奖项类型：0(不设置),1(设置占比),2(设置人数)
     */
    private Integer awardType;

    /**
     * 奖项配置 json
     */
    private String awardConfig;

    /**
     * 是否允许比赛结束后进行提交
     */
    private Integer allowEndSubmit;

    /**
     * 状态
     */
    private Integer status;


    @TableField(exist = false)
    private Integer problemNum;

    @TableField(exist = false)
    private Integer registersNum;

    @TableField(exist = false)
    private List<ContestProblem> contestProblems;

    @TableField(exist = false)
    private List<ContestRegister> registers;

    @TableField(exist = false)
    private UserVO author;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
